内存表增加一列
bool Table->column(string $name, int $type, int $size = 0);
$name
指定字段的名称$type
指定字段类型,支持3
种类型,Table::TYPE_INT
,Table::TYPE_FLOAT
,Table::TYPE_STRING
$size
指定字符串字段的最大长度,单位为字节。字符串类型的字段必须指定$size
Table::TYPE_INT
默认为4
个字节,可以设置1,2,4,8
一共4
种长度Table::TYPE_STRING
设置后,设置的字符串不能超过此长度Table::TYPE_FLOAT
会占用8
个字节的内存
由于Swoole
底层使用有符号整型,如果传入的数值超过最大长度,可能会出现溢出。因此整数类型安全的值范围是:
- 1byte(int8):-127 ~ 127
- 2byte(int16):-32767 ~ 32767
- 4byte(int32):-2147483647 ~ 2147483647
- 8byte(int64):不会溢出
非
x86
环境需要内存对齐
/*
Linux raspberrypi 4.4.34-v7+ #930 SMP Wed Nov 23 15:20:41 GMT 2016 armv7l GNU/Linux
gcc version 4.9.2 (Raspbian 4.9.2-10)
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 76.80
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
*/
//bad
use Swoole\Table;
$table = new \Swoole\Table(8);
$table->column('data',Table::TYPE_STRING, 1);
$table->create();
$table->set(1,[]);
var_dump($table->get(1));
//result: Bus error
//good
use Swoole\Table;
$table = new \Swoole\Table(8);
$table->column('data',Table::TYPE_STRING, 1);
$table->column('pad',Table::TYPE_STRING, 1);
$table->create();
$table->set(1,[]);
var_dump($table->get(1));
/*
result
array(2) {
["data"]=>
string(0) ""
["pad"]=>
string(0) ""
}
*/